home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 5
/
Merciful - Disc 5.iso
/
software
/
p
/
pcqpascalv1.2d.lha
/
Include
/
Devices
/
InputEvent.i
< prev
next >
Wrap
Text File
|
1997-05-06
|
9KB
|
264 lines
{
InputEvent.i for PCQ Pascal
input event definitions
}
{$I "Include:Devices/Timer.i"}
{$I "Include:Intuition/Screens.i"}
{$I "Include:Utility/Hooks.i"}
const
{------ constants -------------------------------------------------}
{ --- InputEvent.ie_Class --- }
{ A NOP input event }
IECLASS_NULL = $00;
{ A raw keycode from the keyboard device }
IECLASS_RAWKEY = $01;
{ The raw mouse report from the game port device }
IECLASS_RAWMOUSE = $02;
{ A private console event }
IECLASS_EVENT = $03;
{ A Pointer Position report }
IECLASS_POINTERPOS = $04;
{ A timer event }
IECLASS_TIMER = $06;
{ select button pressed down over a Gadget (address in ie_EventAddress) }
IECLASS_GADGETDOWN = $07;
{ select button released over the same Gadget (address in ie_EventAddress) }
IECLASS_GADGETUP = $08;
{ some Requester activity has taken place. See Codes REQCLEAR and REQSET }
IECLASS_REQUESTER = $09;
{ this is a Menu Number transmission (Menu number is in ie_Code) }
IECLASS_MENULIST = $0A;
{ User has selected the active Window's Close Gadget }
IECLASS_CLOSEWINDOW = $0B;
{ this Window has a new size }
IECLASS_SIZEWINDOW = $0C;
{ the Window pointed to by ie_EventAddress needs to be refreshed }
IECLASS_REFRESHWINDOW = $0D;
{ new preferences are available }
IECLASS_NEWPREFS = $0E;
{ the disk has been removed }
IECLASS_DISKREMOVED = $0F;
{ the disk has been inserted }
IECLASS_DISKINSERTED = $10;
{ the window is about to be been made active }
IECLASS_ACTIVEWINDOW = $11;
{ the window is about to be made inactive }
IECLASS_INACTIVEWINDOW = $12;
{ extended-function pointer position report (V36) }
IECLASS_NEWPOINTERPOS = $13;
{ Help key report during Menu session (V36) }
IECLASS_MENUHELP = $14;
{ the Window has been modified with move, size, zoom, or change (V36) }
IECLASS_CHANGEWINDOW = $15;
{ the last class }
IECLASS_MAX = $15;
{ --- InputEvent.ie_SubClass --- }
{ IECLASS_NEWPOINTERPOS }
{ like IECLASS_POINTERPOS }
IESUBCLASS_COMPATIBLE = $00;
{ ie_EventAddress points to struct IEPointerPixel }
IESUBCLASS_PIXEL = $01;
{ ie_EventAddress points to struct IEPointerTablet }
IESUBCLASS_TABLET = $02;
{ pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS,
* and IESUBCLASS_PIXEL.
*
* You specify a screen and pixel coordinates in that screen
* at which you'd like the mouse to be positioned.
* Intuition will try to oblige, but there will be restrictions
* to positioning the pointer over offscreen pixels.
*
* IEQUALIFIER_RELATIVEMOUSE is supported for IESUBCLASS_PIXEL.
}
Type
iepp_Position_Struct = Record
x,y : Short;
END;
IEPointerPixel = Record
iepp_Screen : ScreenPtr; { pointer to an open screen }
iepp_Position : iepp_Position_Struct;
END;
IEPointerPixelPtr = ^IEPointerPixel;
{ pointed to by ie_EventAddress for IECLASS_NEWPOINTERPOS,
* and IESUBCLASS_TABLET.
*
* You specify a range of values and a value within the range
* independently for each of X and Y (the minimum value of
* the ranges is always normalized to 0).
*
* Intuition will position the mouse proportionally within its
* natural mouse position rectangle limits.
*
* IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_TABLET.
}
iept_Range_Struct = Record
x,y : Short;
END;
iept_Value_Struct = Record
x,y : Short;
END;
IEPointerTablet = Record
iept_Range : iept_Range_Struct; { 0 is min, these are max }
iept_Value : iept_Value_Struct; { between 0 AND iept_Range }
iept_Pressure : Short; { -128 to 127 (unused, set to 0) }
END;
IEPointerTabletPtr = ^IEPointerTablet;
{ The ie_EventAddress of an IECLASS_NEWPOINTERPOS event of subclass
* IESUBCLASS_NEWTABLET points at an IENewTablet structure.
*
*
* IEQUALIFIER_RELATIVEMOUSE is not supported for IESUBCLASS_NEWTABLET.
}
IENewTablet = Record
{ Pointer to a hook you wish to be called back through, in
* order to handle scaling. You will be provided with the
* width and height you are expected to scale your tablet
* to, perhaps based on some user preferences.
* If NULL, the tablet's specified range will be mapped directly
* to that width and height for you, and you will not be
* called back.
}
ient_CallBack : HookPtr;
{ Post-scaling coordinates and fractional coordinates.
* DO NOT FILL THESE IN AT THE TIME THE EVENT IS WRITTEN!
* Your driver will be called back and provided information
* about the width and height of the area to scale the
* tablet into. It should scale the tablet coordinates
* (perhaps based on some preferences controlling aspect
* ratio, etc.) and place the scaled result into these
* fields. The ient_ScaledX and ient_ScaledY fields are
* in screen-pixel resolution, but the origin ( [0,0]-point )
* is not defined. The ient_ScaledXFraction and
* ient_ScaledYFraction fields represent sub-pixel position
* information, and should be scaled to fill a UWORD fraction.
}
ient_ScaledX, ient_ScaledY,
ient_ScaledXFraction, ient_ScaledYFraction : WORD;
{ Current tablet coordinates along each axis: }
ient_TabletX, ient_TabletY : Integer;
{ Tablet range along each axis. For example, if ient_TabletX
* can take values 0-999, ient_RangeX should be 1000.
}
ient_RangeX, ient_RangeY : Integer;
{ Pointer to tag-list of additional tablet attributes.
* See <intuition/intuition.h> for the tag values.
}
ient_TagList : Address;
end;
IENewTabletPtr = ^IENewTablet;
CONST
{ --- InputEvent.ie_Code --- }
{ IECLASS_RAWKEY }
IECODE_UP_PREFIX = $80;
IECODE_KEY_CODE_FIRST = $00;
IECODE_KEY_CODE_LAST = $77;
IECODE_COMM_CODE_FIRST = $78;
IECODE_COMM_CODE_LAST = $7F;
{ IECLASS_ANSI }
IECODE_C0_FIRST = $00;
IECODE_C0_LAST = $1F;
IECODE_ASCII_FIRST = $20;
IECODE_ASCII_LAST = $7E;
IECODE_ASCII_DEL = $7F;
IECODE_C1_FIRST = $80;
IECODE_C1_LAST = $9F;
IECODE_LATIN1_FIRST = $A0;
IECODE_LATIN1_LAST = $FF;
{ IECLASS_RAWMOUSE }
IECODE_LBUTTON = $68; { also uses IECODE_UP_PREFIX }
IECODE_RBUTTON = $69;
IECODE_MBUTTON = $6A;
IECODE_NOBUTTON = $FF;
{ IECLASS_EVENT }
IECODE_NEWACTIVE = $01; { active input window changed }
IECODE_NEWSIZE = $02; { resize of window }
IECODE_REFRESH = $03; { refresh of window }
{ IECLASS_REQUESTER Codes }
{ REQSET is broadcast when the first Requester (not subsequent ones) opens
* in the Window
}
IECODE_REQSET = $01;
{ REQCLEAR is broadcast when the last Requester clears out of the Window }
IECODE_REQCLEAR = $00;
{ --- InputEvent.ie_Qualifier --- }
IEQUALIFIER_LSHIFT = $0001;
IEQUALIFIER_RSHIFT = $0002;
IEQUALIFIER_CAPSLOCK = $0004;
IEQUALIFIER_CONTROL = $0008;
IEQUALIFIER_LALT = $0010;
IEQUALIFIER_RALT = $0020;
IEQUALIFIER_LCOMMAND = $0040;
IEQUALIFIER_RCOMMAND = $0080;
IEQUALIFIER_NUMERICPAD = $0100;
IEQUALIFIER_REPEAT = $0200;
IEQUALIFIER_INTERRUPT = $0400;
IEQUALIFIER_MULTIBROADCAST = $0800;
IEQUALIFIER_MIDBUTTON = $1000;
IEQUALIFIER_RBUTTON = $2000;
IEQUALIFIER_LEFTBUTTON = $4000;
IEQUALIFIER_RELATIVEMOUSE = $8000;
IEQUALIFIERB_LSHIFT = 0;
IEQUALIFIERB_RSHIFT = 1;
IEQUALIFIERB_CAPSLOCK = 2;
IEQUALIFIERB_CONTROL = 3;
IEQUALIFIERB_LALT = 4;
IEQUALIFIERB_RALT = 5;
IEQUALIFIERB_LCOMMAND = 6;
IEQUALIFIERB_RCOMMAND = 7;
IEQUALIFIERB_NUMERICPAD = 8;
IEQUALIFIERB_REPEAT = 9;
IEQUALIFIERB_INTERRUPT = 10;
IEQUALIFIERB_MULTIBROADCAST = 11;
IEQUALIFIERB_MIDBUTTON = 12;
IEQUALIFIERB_RBUTTON = 13;
IEQUALIFIERB_LEFTBUTTON = 14;
IEQUALIFIERB_RELATIVEMOUSE = 15;
{------ InputEvent ------------------------------------------------}
type
InputEvent = record
ie_NextEvent : ^InputEvent; { the chronologically next event }
ie_Class : Byte; { the input event class }
ie_SubClass : Byte; { optional subclass of the class }
ie_Code : Short; { the input event code }
ie_Qualifier : Short; { qualifiers in effect for the event}
ie_addr_xy : Integer; { addr or pointer position }
ie_TimeStamp : TimeVal; { the system tick at the event }
end;
InputEventPtr = ^InputEvent;